const BASE_URL_TEST = import.meta.env.VITE_BASE_PATH

import axios, {
  type AxiosError,
  type AxiosRequestConfig,
  type InternalAxiosRequestConfig
} from 'axios'
interface AxiosRequestConfigEx extends AxiosRequestConfig {
  donNotShowLoading?: boolean
}

import { type ResType, type PageDataType, type RolesType } from '../types/type52'

// 创建一个自定义 axios 实例
const axiosInstance = axios.create({
  // 基本的url
  baseURL: BASE_URL_TEST
  // 超时的时间
  // timeout: 10000,
  // headers: { 'X-Custom-Header': 'foobar' } // 请求头
})

// http request 拦截器
// 请求拦截
axiosInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  // 使用 set方法来设置 headers
  config.headers.set('Content-Type', 'application/json')
  return config
}),
  (error: AxiosError) => {
    // 请求报错
    Promise.reject(error)
  }

// 响应拦截
axiosInstance.interceptors.response.use(
  (response) => {
    // 响应成功时做一些处理
    console.log('响应拦截器：', response)
    return response
  },
  (error) => {
    //
    if (error.response.status === 401) {
      // 如果是 401 错误，可能是未授权，跳转到登录页面
      window.location.href = './login'
    } else if (error.response.status === 500) {
      // 服务器错误
      console.log('服务器错误')
    }
    return Promise.reject(error)
  }
)

// 服务请求 axios请求封装service
export const service = <T = any>(config: AxiosRequestConfigEx) => {
  return axiosInstance.request<ResType<T>>(config).then((response) => {
    return response.data
  })
}

// get 查看角色分页列表
export const requestGetRolesPage = (params: any) => {
  // 使用自定义的实例 通过 request方法 发送 get 请求
  // return axiosInstance.request<ResType<PageDataType<RolesType>>>({
  //   method: 'get',
  //   url: '/roles/page',
  //   params // 查询参数
  // })
  // .then(response => console.log(response.data))
  // .catch(error => console.error(error));

  // 使用service请求数据
  return service<PageDataType<RolesType>>({
    method: 'get',
    url: '/roles/page',
    params // 查询参数
  })
}

// post 添加角色
export const requestPostRoles = (data: any) => {
  // return axiosInstance.request<ResType<PageDataType<RolesType>>>({
  //   method: 'post',
  //   url: '/roles',
  //   data,
  // })
  // .then(response => console.log(response.data))
  // .catch(error => console.error(error));

  return service<PageDataType<RolesType>>({
    method: 'post',
    url: '/roles',
    data
  })
}

// put 通过角色的id修改角色信息
export const requestPutRolesByRoleId = (roleId: number, data: RolesType) => {
  // return axiosInstance.request<ResType<PageDataType<RolesType>>>({
  //   method: 'put',
  //   url: `/roles/${roleId}`,
  //   data,
  // })
  // .then(response => console.log(response.data))
  // .catch(error => console.error(error));

  return service<PageDataType<RolesType>>({
    method: 'put',
    url: `/roles/${roleId}`,
    data
  })
}

// delete 删除角色
export const requestDeleteRolesByIds = (ids: string) => {
  // return axiosInstance.request<ResType<PageDataType<RolesType>>>({
  //   method: 'delete',
  //   url: `/roles/${ids}`
  // })
  // .then(response => console.log(response.data))
  // .catch(error => console.error(error));

  return service<PageDataType<RolesType>>({
    method: 'delete',
    url: `/roles/${ids}`
  })
}

// patch 修改角色状态
export const requestPatchRolesByRoleIdUpdateStatus = (roleId: string, status: number) => {
  // return axiosInstance.request<ResType<PageDataType<RolesType>>>({
  //   method: 'patch',
  //   url: `/roles/${roleId}/status`,
  //   params: { status }
  // })
  // .then(response => console.log(response.data))
  // .catch(error => console.error(error));

  return service<PageDataType<RolesType>>({
    method: 'patch',
    url: `/roles/${roleId}/status`,
    params: { status }
  })
}
